package com.gdust.hzx.manager.controller;

import com.gdust.hzx.manager.service.CategoryService;
import com.gdust.spzx.common.log.annotation.Log;
import com.gdust.spzx.common.log.enums.OperatorType;
import com.gdust.hzx.model.entity.product.Category;
import com.gdust.hzx.model.vo.common.Result;
import com.gdust.hzx.model.vo.common.ResultCodeEnum;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * ClassName: CategoryController
 * Package: com.gdust.spzx.manager.controller
 * Description:分类管理
 *
 * @Author syun
 * @Create 2024/12/1 17:23
 * @Version 1.0
 */
@RestController
@RequestMapping(value="/admin/product/category")
public class CategoryController {

    @Autowired
    private CategoryService categoryService;

    /**
     * 查询列表接口
     * 分类列表，每次查询一层数据
     * SELECT * FROM category WHERE parent_id = #{id}
     * @param id 父节点id
     * @return 分类实体集合与结果枚举
     */
    @GetMapping("/findCategoryList/{id}")
    public Result findCategoryList(@PathVariable Long id){
       List<Category> list = categoryService.findCategoryList(id);
       return Result.build(list, ResultCodeEnum.SUCCESS);
    }

    /**
     * 导出分类数据到 Excel 文件
     *
     * 描述：该接口将分类数据导出为 Excel 文件，并通过 HTTP 响应发送到客户端。
     *
     * @param response HTTP 响应对象，用于将生成的文件流输出到客户端
     */
    @GetMapping("/exportData")
    @Log(title = "导出分类数据到 Excel 文件",businessType = 0,operatorType = OperatorType.MANAGE)
    public void exportData(HttpServletResponse response){
        // 调用服务层方法处理数据导出逻辑
        categoryService.exportData(response);
    }

    /**
     * 导入 Excel 文件数据
     *
     * 描述：该方法用于接收上传的 Excel 文件并导入其中的分类数据。
     * 服务层处理文件解析及数据存储逻辑。
     *
     * @param file 上传的 Excel 文件（MultipartFile 类型）
     * @return 操作结果，包含成功状态和返回码
     */
    @PostMapping("/importData")
    public Result importData(MultipartFile file){
        //获取上传文件
        categoryService.importData(file);
        // 返回操作成功的结果，内容为空，仅包含成功的状态码
        return Result.build(null,ResultCodeEnum.SUCCESS);
    }


}
